﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Optimization.Utilities
{
    /// <summary>
    /// Empty problem is dummy problem
    /// </summary>
    [IsProblem]
    public class EmptyProblem : IProblem
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="v"></param>
        /// <returns></returns>
        public double Evaluate(Vector v)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="mins"></param>
        /// <param name="maxs"></param>
        public void GetBounds(out Vector mins, out Vector maxs)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="v"></param>
        /// <returns></returns>
        public bool IsFeasible(Vector v)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public Vector RandomSolution()
        {
            throw new NotImplementedException();
        }
    }

    /// <summary>
    /// Empty solver is dummy solver
    /// </summary>
    [IsSolver]
    public class EmptySolver : ISolver
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="cf"></param>
        public void DefineProblem(Func<IProblem> cf)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public Vector GetSolution()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="solution"></param>
        /// <param name="solutionValue"></param>
        public void SetSolution(Vector solution, double solutionValue)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public double GetSolutionValue()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// 
        /// </summary>
        public void Step()
        {
            throw new NotImplementedException();
        }
    }
}
